package com.merry.mq.workQueue;

import com.merry.mq.utils.RabbitMQUtils;
import com.merry.mq.utils.SleepUtils;
import com.rabbitmq.client.CancelCallback;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Work02 {
    //队列的名称
    public static final String QUEUE_NAME="durable_queue";
    //接受消息
    public static void main(String[] args) throws IOException, TimeoutException {
        Channel channel = RabbitMQUtils.getChannel();
        //声明接收消息
        DeliverCallback deliverCallback = (consumerTag, message) -> {
            //消费者成功消费的回调函数
            //message 根据业务逻辑接收的消息，比如xml文件。
            SleepUtils.sleep(1);
            System.out.println("Work02。。" + new String(message.getBody()));
            channel.basicAck(message.getEnvelope().getDeliveryTag(),false);
        };

        //取消消息时的回调
        CancelCallback cancelCallback = consumerTag -> {
            System.out.println("消息消费被中断");
        };

        /**
         * 消费者消费消息
         * 1.消费哪个队列
         * 2.消费成功之后是否要自动应答true：代表自动应答false:代表手动应答
         * 3.消费者成功消费的回调
         * 4.消费者取消消费的回调
         */
        channel.basicQos(1);//在我们项目中将这个值设置成100 -300 效果最好。
        channel.basicConsume(QUEUE_NAME, false, deliverCallback, cancelCallback);
    }
}
